<?php

class Application_Model_ProductosMapper
{
	protected $_dbTable;
	
	public function setDbTable($dbTable)
    {
        if (is_string($dbTable)) {
        	//Creamos la instancia
            $dbTable = new $dbTable();
        }
        if (!$dbTable instanceof Zend_Db_Table_Abstract) {
            throw new Exception('Invalid table data gateway provided Productos');
        }
        $this->_dbTable = $dbTable;
        return $this;
    }
 
    public function getDbTable()
    {
        if (null === $this->_dbTable) {
            $this->setDbTable('Application_Model_DbTable_Productos');
        }
        return $this->_dbTable;
    }
    
	public function fetchAll($where, $order_by = 'id_producto ASC')
	{
		$resultSet = $this->getDbTable()->fetchAll($where, $order_by);
		$entries = array();
				
		foreach ($resultSet as $row) {
			$productos = new Application_Model_Productos();
			
			$productos->setId_producto($row->id_producto)
					  ->setTipo_registro($row->tipo_registro)
					  ->setTitulo($row->titulo)
				 	  ->setDescripcion($row->descripcion)
				 	  ->setDireccion($row->direccion)
					  ->setImagen($row->imagen)
					  ->setTipo_producto($row->tipo_producto)
					  ->setFecha($row->fecha)
					  ->setDocumento($row->documento)
					  ->setEmpresa($row->empresa)
					  ->setContacto($row->contacto)
					  ->setTelefono($row->telefono)
					  ->setEmail($row->email)
					  ->setOferta_lugar($row->oferta_lugar)
					  ->setOferta_tipo($row->oferta_tipo);
					  
			$entries[] = $productos;
		}
		return $entries;
	}
	
	public function find($id, Application_Model_Productos $producto)
    {
        $result = $this->getDbTable()->find($id);
        if (0 == count($result)) {
            return;
        }
        $row = $result->current();
        $producto->setId_producto($row->id_producto)
        		 ->setTipo_registro($row->tipo_registro)
				 ->setTitulo($row->titulo)
				 ->setDescripcion($row->descripcion)
				 ->setDireccion($row->direccion)
				 ->setImagen($row->imagen)
				 ->setTipo_producto($row->tipo_producto)
				 ->setFecha($row->fecha)
				 ->setDocumento($row->documento)
				 ->setEmpresa($row->empresa)
				 ->setContacto($row->contacto)
				 ->setTelefono($row->telefono)
				 ->setEmail($row->email)
				 ->setOferta_lugar($row->oferta_lugar)
				 ->setOferta_tipo($row->oferta_tipo);
    }
    
	public function save(Application_Model_Productos $producto)
    {
        $data = array('id_producto'  => $producto->getId_producto(),
        			  'tipo_registro'=> $producto->getTipo_registro(),
            		  'titulo'   	 => $producto->getTitulo(),
            		  'descripcion'  => $producto->getDescripcion(),
        			  'direccion'  	 => $producto->getDireccion(),
        			  'imagen'		 => $producto->getImagen(),
        			  'tipo_producto'=> $producto->getTipo_producto(),
        			  'fecha'		 => $producto->getFecha(),
        			  'documento'	 => $producto->getDocumento(),
        			  'empresa'		 => $producto->getEmpresa(),
        			  'contacto'	 => $producto->getContacto(),
        			  'telefono'	 => $producto->getTelefono(),
        			  'email'	 	 => $producto->getEmail(),
        			  'oferta_lugar' => $producto->getOferta_lugar(),
        			  'oferta_tipo'  => $producto->getOferta_tipo()
        );
        
        if (null === ($id = $producto->getId_producto())) {        	
            unset($data['id_producto']);
            $this->getDbTable()->insert($data);
        } else {
            $this->getDbTable()->update($data, array('id_producto = ?' => $id));
        }
    }
    
    public function delete($id)
    {
    	$this->getDbTable()->delete("id_producto = $id");
    }

}

